package com.example.service;

import com.example.domain.dto.PageResponse;
import com.example.domain.dto.product.*;

import java.util.List;

/**
 * 商品服务接口
 * 
 * @author Means
 * @since 2025-10-27
 */
public interface ProductService {
    
    // ==================== CRUD操作 ====================
    
    /**
     * 创建商品
     * 
     * @param request 创建商品请求
     * @return 创建的商品列表项DTO（含价格信息）
     */
    ProductListItemDTO createProduct(CreateProductRequest request);
    
    /**
     * 更新商品
     * 
     * @param id 商品ID
     * @param request 更新商品请求
     * @return 更新后的商品DTO
     */
    ProductListItemDTO updateProduct(String id, UpdateProductRequest request);
    
    /**
     * 删除商品（软删除）
     * 
     * @param id 商品ID
     */
    void deleteProduct(String id);
    
    /**
     * 根据ID获取商品详情（仅商品基本信息，不含价格）
     * 
     * @param id 商品ID
     * @return 商品基本信息（含描述）
     */
    ProductListItemDTO getProductById(String id);
    
    /**
     * 检查商品是否存在
     * 
     * @param id 商品ID
     * @return 是否存在
     */
    boolean existsProduct(String id);
    
    // ==================== 查询操作 ====================
    
    /**
     * 分页查询商品列表
     * 
     * @param request 搜索请求（包含分页、排序、过滤条件）
     * @return 商品分页列表
     */
    PageResponse<ProductListItemDTO> listProducts(ProductSearchRequest request);
    
    /**
     * 获取所有已上架的商品（带价格信息，用于列表展示）
     * 
     * @return 商品列表
     */
    List<ProductListItemDTO> getActiveProducts();
    
    
    /**
     * 搜索商品（按名称模糊查询，带价格信息，用于列表展示）
     * 
     * @param keyword 关键词
     * @return 商品列表
     */
    List<ProductListItemDTO> searchProducts(String keyword);
    
    // ==================== 业务操作 ====================
    
    /**
     * 上架商品
     * 
     * @param id 商品ID
     * @return 更新后的商品列表项DTO（含价格信息）
     */
    ProductListItemDTO activateProduct(String id);
    
    /**
     * 下架商品
     * 
     * @param id 商品ID
     * @return 更新后的商品列表项DTO（含价格信息）
     */
    ProductListItemDTO deactivateProduct(String id);
    
    /**
     * 检查商品是否已上架
     * 
     * @param id 商品ID
     * @return 是否已上架
     */
    boolean isProductActive(String id);
    
    /**
     * 批量上架商品
     * 
     * @param ids 商品ID列表
     */
    void batchActivateProducts(List<String> ids);
    
    /**
     * 批量下架商品
     * 
     * @param ids 商品ID列表
     */
    void batchDeactivateProducts(List<String> ids);
}

